﻿
CREATE  FUNCTION [dbo].[SplitBigIntParameters](@sText varchar(8000), @sDelim varchar(20) = ' ')
RETURNS @retArray 
TABLE (
	idx smallint Primary Key, 
	value bigint
)
AS
BEGIN
	DECLARE @idx int,
	@value varchar(8000),
	@bcontinue bit,
	@iStrike int,
	@iDelimlength int

	IF @sDelim = 'Space'
		BEGIN
			SET @sDelim = ' '
		END

	SET @idx = 0
	SET @sText = LTrim(RTrim(@sText))
	SET @iDelimlength = DATALENGTH(@sDelim)
	SET @bcontinue = 1

	if(Len(@sText) = 0)
		return

	IF NOT ((@iDelimlength = 0) or (@sDelim = 'Empty'))
	BEGIN
		WHILE @bcontinue = 1
		BEGIN
			--Daca se poate gasii primul delimitator in text, extrage primul element si
			--il insereaza cu indexul sau in tabela rezultat
			IF CHARINDEX(@sDelim, @sText)>0
			BEGIN
				SET @value = SUBSTRING(@sText,1,CHARINDEX(@sDelim,@sText)-1)
				BEGIN
					INSERT @retArray (idx, value)
					VALUES (@idx, CAST(@value as bigint))
				END
				--Elimina elementul si delimitatorul sau de la inceputul sirului
				--incrementeaza indexul ciclului
				SET @iStrike = DATALENGTH(@value) + @iDelimlength
				SET @idx = @idx + 1
				SET @sText = LTrim(Right(@sText,DATALENGTH(@sText) - @iStrike))
			END
			ELSE
			BEGIN
				--Daca nu gasim delimitator in text, @sText este ultima valoare dintabela
				SET @value = @sText
				INSERT @retArray (idx, value)
				VALUES (@idx, CAST(@value as bigint))
				--Termina bucla.
				SET @bcontinue = 0
			END
		END
	END
	
	RETURN
END